import java.util.*;
 //题目描述
 //
 //小鹏在奥数课上碰到了一个棋盘难题，有一个 m×n 的格子的棋盘，每个格子里面有一个非负数。
 //从中取出若干个数，所取数所在的 2 个格子不能相邻，并且取出的数的和最大。请你帮帮小鹏快速算出棋盘里不相邻的数最大之和的结果。
 //
 //输入输出格式
 //
 //输入格式
 //包括多个测试实例，每个测试实例包括 2 整数 m, n 和 m×n 个非负数。
 //输出格式
 //对于每个测试实例，输出可能取得的最大的和。
 //
 //输入输出样例1
 //
 //输入
 //3 3
 //75 15 21
 //75 15 28
 //34 70 5
 //输出
 //188
 //
 //说明提示
 //
 //m≤50,n≤50

public class Main {
    static int[][] arr;
    static int[][] copy;
    static int h = 2, w = 2, maxSum = 0;
 
    public static int calculate(int i, int j) {
 
        if (copy[i][j] == -1)
            return 0;
 
        int m = copy[i][j];
 
        copy[i][j] = -1;
 
        if (j + 2 <= w)
            m += calculate(i, j + 2);
 
        if (i + 2 <= h)
            m += calculate(i + 2, j);
 
        if (i + 1 <= h && j - 1 >= 0)
            m += calculate(i + 1, j - 1);
 
        if (i + 1 <= h && j + 1 <= w)
            m += calculate(i + 1, j + 1);
 
        return m;
    }
 
    public static void fun() {
        for (int i = 0; i <= h; i++) {
            for (int j = 0; j <= w; j++) {
                //每次都操作副本
                copy = arr;
                maxSum = Math.max(maxSum, calculate(i, j));
            }
        }
    }
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入行数：");
        h = scanner.nextInt() - 1;
        System.out.print("输入列数：");
        w = scanner.nextInt() - 1;
        arr = new int[h + 1][w + 1];
        System.out.print("输入元素");
        for (int i = 0; i <= h; i++) {
            for (int j = 0; j <= w; j++) {
                arr[i][j] = scanner.nextInt();
            }
        }
        fun();
        System.out.println("最大结果：" + maxSum);
    }
}
